package com.sunday.aomicaichang.http;

import com.sunday.common.model.ResultDO;
import com.sunday.aomicaichang.model.Areas;
import com.sunday.aomicaichang.model.Assess;
import com.sunday.aomicaichang.model.CookBook;
import com.sunday.aomicaichang.model.Coupon;
import com.sunday.aomicaichang.model.Find;
import com.sunday.aomicaichang.model.Integral;
import com.sunday.aomicaichang.model.MenuDetail;
import com.sunday.aomicaichang.model.OrderNum;
import com.sunday.aomicaichang.model.Product;
import com.sunday.aomicaichang.model.Revenue;
import com.sunday.aomicaichang.model.Score;
import com.sunday.aomicaichang.model.Wallet;
import com.sunday.member.entity.Member;
import com.sunday.member.entity.Village;
import com.sunday.member.entity.order.OrderConfirm;
import com.sunday.member.entity.order.OrderItem;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;


public interface ApiService {

    /**
     * 【用户版】用户微博第三方登录。
     * @param thirdType 第三方登陆类型1,微信，2qq,3，微博
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/loginWithThirdOne")
    Call<ResultDO<Member>> loginWithThirdOne(@Field("unionId") String unionId,@Field("thirdType") int thirdType);
    /**
     * 【用户版】用户微博第三方登录。
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/loginWithThirdTwo")
    Call<ResultDO<Member>> loginWithThirdTwo(@Field("unionId") String unionId, @Field("nickName") String nickName
            , @Field("image") String image, @Field("thirdType") int thirdType, @Field("code") String code,
                                 @Field("mobile") String mobile);
    /**
     * 【用户版】用户微博第三方登录。
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/loginWithThirdThree")
    Call<ResultDO<Member>> loginWithThirdThree(@Field("unionId") String unionId, @Field("password") String password, @Field("nickName") String nickName
            ,@Field("image") String image, @Field("thirdType") int thirdType, @Field("code") String code, @Field("mobile") String mobile,
                                 @Field("villageId") int villageId);
    /**
     * 【用户版】验证验证码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/code/check")
    Call<ResultDO> check(@Field("mobile") String mobile, @Field("type") int type, @Field("code") String code);
    /**
     * 【用户版】用户发送验证码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/code/send")
    Call<ResultDO> send(@Field("mobile") String mobile, @Field("type") int type, @Field("nonce") String nonce
            , @Field("sign") String sign);
    /**
     * 【用户版】用户注册
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/register")
    Call<ResultDO<Member>> register(@Field("mobile") String mobile, @Field("password") String password, @Field("code") String code
            , @Field("villageId") int villageId);
    /**
     * 【用户版】获取商品数据
     *商品类型。1商城商品。2积分商品，3采购商品
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/product/select")
    Call<ResultDO<List<Product>>> product(@Field("type") int type, @Field("villageId") int villageId,@Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber
            , @Field("nonce") String nonce, @Field("sign") String sign);

    /**
     * 【用户版】签到中获取积分数据
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/common/getScoreData")
    Call<ResultDO<Score>> getScore(@Field("type") int type,@Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber
            , @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】积分列表中获取积分数据
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/common/getScoreData")
    Call<ResultDO<Integral>> getIntegral(@Field("type") int type, @Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber
            , @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】签到
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/common/sign")
    Call<ResultDO> sign(@Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】获取菜谱数据
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/cookbook/select")
    Call<ResultDO<List<CookBook>>> menu(@Field("name") String name,@Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber
            , @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】获取优惠券数据
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/promotion/coupon/getMemberCoupon")
    Call<ResultDO<List<Coupon>>> getMemberCoupon(@Field("amount") String amount, @Field("memberId") long memberId, @Field("status") String status, @Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber
            , @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】获取发现数据
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/advertisement/getAdvertisementByZoneKeys")
    Call<ResultDO<List<Find>>> getAdvertisementByZoneKey(@Field("zoneKeys") String zoneKeys);
    /**
     * 【用户版】修改密码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/updatePasswordWithCode")
    Call<ResultDO> updatePasswordWithCode(@Field("mobile") String mobile,@Field("newPassword") String newPassword,
                                          @Field("code") String code,@Field("nonce") String nonce,
                                          @Field("sign") String sign);
    /**
     * 【用户版】修改支付密码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/updatePayPassWord")
    Call<ResultDO> updatePayPassWord(@Field("payPassword") String payPassword,
                                          @Field("code") String code,@Field("nonce") String nonce,
                                          @Field("sign") String sign);
    /**
     * 【用户版】设置用户支付密码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/setPayPassword")
    Call<ResultDO> setPayPassword(@Field("payPassword") String newPassword,
                                          @Field("code") String code,@Field("nonce") String nonce,
                                          @Field("sign") String sign);
    /**
     * 【用户版】忘记密码
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/forgetPassword")
    Call<ResultDO> forgetPassword(@Field("mobile") String mobile,
                                  @Field("newPassword") String newPassword,@Field("code") String code);
    /**
     * 【用户版】修改用户信息
     *
     */
    @FormUrlEncoded
    @POST("/sunday/mobile/member/update")
    Call<ResultDO> update(@Field("nickName") String nickName,@Field("mobileName") String mobileName,
                                          @Field("address") String address, @Field("email") String email,
                          @Field("image") String image, @Field("idCard") String idCard,
                          @Field("desc") String desc, @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】钱包交易记录
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/income/record/select")
    Call<ResultDO<List<Wallet>>> record(@Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber,
                                   @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】钱包交易记录
     *
     */
    @POST("/kitchen/mobile/village/getVillageByTree")
    Call<ResultDO<List<com.sunday.aomicaichang.model.Village>>> getVillageByTree();
    /**
     * 【用户版】菜谱详情
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/cookbook/findOne")
    Call<ResultDO<MenuDetail>> findOne(@Field("id") long id, @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】评论列表
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/common/getComment")
    Call<ResultDO<List<Assess>>> getComment(@Field("type") int type, @Field("outClassId") long outClassId,
                                            @Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber,
                                            @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】首页获取小区
     *
     */
    @POST("/kitchen/mobile/village/getMemberVillage")
    Call<ResultDO<List<Village>>> getVillage();
    /**
     * 【用户版】收藏
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/collection/save")
    Call<ResultDO> save(@Field("type") int type,@Field("otherId") long otherId,  @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】订单评论
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/order/comment")
    Call<ResultDO> comment(@Field("orderId") long orderId,@Field("productIds") String productIds,
                           @Field("contents") String contents,@Field("scores") String scores,
                           @Field("images") String images,
                           @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版和管理版】分页获取订单
     *
     * @param type          订单类型。1,用户自己的商城订单，2用户自己的积分订单，3，门店/大客户自己的采购订单，4，门店的配送订单
     * @param orderStatuses 订单状态集合，支持传入多个状态。例如：orderStatuses=1,2,30全部，1，待付款，2待配送，3配送中，4待评价，
     *                      5已评价，6待退款， 7已退款，8待退货，9已退货
     * @param sort          排序参数。字段名称。默认为空
     * @param order         排序参数。。默认为空。ASC正序/DESC倒序
     * @param pageSize      分页参数。每页数量。默认20
     * @param pageNumber    分页参数。第几页。默认1
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/order/select")
    Call<ResultDO<List<OrderItem>>> getOrderList(@Field("type") int type, @Field("orderStatuses") String orderStatuses,
                                                 @Field("pageSize") int pageSize, @Field("pageNumber") int pageNumber,
                                                 @Field("sort") String sort, @Field("order") String order,
                                                 @Field("nonce") String nonce, @Field("sign") String sign);

    /**
     * 【用户版】获取订单状态数量
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/order/getOrderNumber")
    Call<ResultDO<OrderNum>> getOrderNumber(@Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版和管理版】立即购买结算（确认订单）。如果使用了优惠券，余额，或切换了配送方式。请重新调用接口加载数据
     *
     * @param
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/count/countBuyNow")
    Call<ResultDO<OrderConfirm>> countBuyNow(@Field("productId") long productId, @Field("number") int number, @Field("villageId") Integer villageId,
                                             @Field("isUsedBalance") int isUsedBalance, @Field("couponId") int couponId, @Field("sendType") int sendType, @Field("nonce") String nonce,
                                             @Field("sign") String sign);
    /**
     * 【用户版】按经纬度获取小区。注册时使用
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/village/getVillageByLocation")
    Call<ResultDO<List<Areas>>> getVillageByLocation(@Field("latitude") String latitude,@Field("longitude") String longitude);

    /**
     * 【用户版和管理版】购物车结算（确认订单）。如果使用了优惠券，余额，或切换了配送方式。请重新调用接口加载数据
     *
     * @param cartIds 购物车ID集合(非商品ID)。
     * @param
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/count/countCart")
    Call<ResultDO<OrderConfirm>> countCart(@Field("cartIds") String cartIds, @Field("villageId") Integer villageId,
                                           @Field("isUsedBalance") int isUsedBalance, @Field("couponId") int couponId, @Field("sendType") int sendType,
                                           @Field("nonce") String nonce, @Field("sign") String sign);
    /**
     * 【用户版】 余额显示
     *
     */
    @FormUrlEncoded
    @POST("/kitchen/mobile/income/getRevenue")
    Call<ResultDO<Revenue>> getRevenue(@Field("nonce") String nonce, @Field("sign") String sign);

}
